package br.com.rglariguet.pioneer.controller.adm;

import java.util.Arrays;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import br.com.rglariguet.pioneer.controller.ControllerComum;
import br.com.rglariguet.pioneer.dao.AutorizadaDAO;
import br.com.rglariguet.pioneer.dao.DadosBasicosProdutoDAO;
import br.com.rglariguet.pioneer.dao.DefeitoPioneerDAO;
import br.com.rglariguet.pioneer.dao.ReparoOemDAO;
import br.com.rglariguet.pioneer.enums.StatusReparoOemEnum;
import br.com.rglariguet.pioneer.enums.StatusReparoUsuarioEnum;
import br.com.rglariguet.pioneer.enums.TipoUsuarioEnum;
import br.com.rglariguet.pioneer.filtropesquisa.FiltroReparoOem;
import br.com.rglariguet.pioneer.modelos.ReparoOem;
import br.com.rglariguet.pioneer.util.MensagemTela;
import br.com.rglariguet.pioneer.wrapper.ListaReparoOemWrapper;

@Controller()
@RequestMapping("/seguro/adm/")
public class ReparoOemAdminController extends ControllerComum{

	@Autowired
	private AutorizadaDAO autorizadaDao;

	@Autowired
	private ReparoOemDAO reparoOemDao;
	
	@Autowired
	private DefeitoPioneerDAO defeitoPioneerDao;
	
	@Autowired
	private DadosBasicosProdutoDAO dadosBasicosProdutoDao;
	
	private ReparoOem reparoOem = new ReparoOem();
	
	@ModelAttribute("reparoOem")
	public ReparoOem getReparoOem() {
		return this.reparoOem;
	}
	
	public void setReparoOem(ReparoOem reparoOem) {
		this.reparoOem = reparoOem;
	}
	
	
	@RequestMapping("consultaReparosOEMAdm")
	public ModelAndView abreTelaConsultaReparosOEMAdm(ListaReparoOemWrapper reparoOemWrapper, boolean isRetornoConsulta){
		ModelAndView mv = new ModelAndView("/seguro/adm/consultaReparosOEMAdm");
		mv.addObject("autorizadas", autorizadaDao.listarTodosPorTipo(TipoUsuarioEnum.OEM));
		mv.addObject("dadosBasicos", dadosBasicosProdutoDao.listarTodos());
		mv.addObject("reparoOem", reparoOemWrapper.getReparosOem());
		mv.addObject("status", Arrays.asList(StatusReparoOemEnum.values()));
		if (!isRetornoConsulta) {
			mv.addObject("filtroReparoOem", new FiltroReparoOem());
		} else {
			if (reparoOemWrapper.getReparosOem().isEmpty()) {
				mv.addObject("msg", criaMsgErro("reparo.nao.encontrado"));
			}
		}
		return mv;
	}
	
	
	@RequestMapping("buscarReparosOemAdmin")
	public ModelAndView consultar(FiltroReparoOem filtroReparoOem) {
		ModelAndView mv = new ModelAndView("/seguro/adm/consultaReparosOEMAdm");
		List<ReparoOem> reparos = reparoOemDao.listarComFiltro(filtroReparoOem);
		mv.addObject("reparos", reparos);
		mv.addObject("autorizadas", autorizadaDao.listarTodosPorTipo(TipoUsuarioEnum.OEM));
		mv.addObject("dadosBasicos", dadosBasicosProdutoDao.listarTodos());
		mv.addObject("status", Arrays.asList(StatusReparoUsuarioEnum.values()));
		return mv;
	}
	
	@RequestMapping("editarReparoOemAdmin")
	public ModelAndView abreTelaEdicaoReparo(long id) {
		setReparoOem(reparoOemDao.buscaPorId(id));
		return abreTelaDetalheDeReparo(new MensagemTela(), true, getReparoOem());
	}
	
	@RequestMapping("entradaDeDetalheOEMAdm")
	public ModelAndView abreTelaDetalheDeReparo(MensagemTela msg,
			boolean isRetornoValidacao,ReparoOem reparoOem) {
		ModelAndView mv = new ModelAndView("/seguro/adm/aprovacaoDeReparoOEM");
		mv.addObject("dadosBasicos", dadosBasicosProdutoDao.listarTodos());
		mv.addObject("msg", msg.getTipoMensagem() != null ? msg : null);
		mv.addObject("reparoOem", reparoOem);
		return mv;
	}
	
	
	@RequestMapping("aprovarReparoOemAdmin")
	public ModelAndView aprovarReparo(long id) {
		reparoOem.setStatus(StatusReparoOemEnum.APROVADO);
		reparoOemDao.alterar(reparoOem);
		setReparoOem(reparoOem);
		return abreTelaDetalheDeReparo(criaMsgSucesso("reparo.aprovado.sucesso"), true, getReparoOem());
	}
	
	@RequestMapping("reprovarReparoOem")
	public ModelAndView reprovarReparo(String motivoReprovacao) {
		reparoOem.setStatus(StatusReparoOemEnum.REPROVADO);
		reparoOem.setMotivoReprovacao(motivoReprovacao);
		reparoOemDao.alterar(reparoOem);
		setReparoOem(reparoOem);
		return abreTelaDetalheDeReparo(criaMsgSucesso("reparo.reprovado.sucesso"), true, getReparoOem());
	}
	
	

}
